/**
 * SQLite数据库初始化
 * 1.npm install sqlite3
 * 2.API文档:https://github.com/TryGhost/node-sqlite3/wiki/API
 */

//导入Node.js文件模块
const fs = require("fs");
//导入SQLite3模块   verbose() 方法会输出更详细的日志信息，例如 SQL 语句或执行结果等
const sqlite3 = require("sqlite3").verbose();
//导入工具模块
const util = require("../../common/util");
//导入配置模块
const config = require("../../common/config");

//SQL语句：创建Book数据表
const sqlCreateBook = `
    CREATE TABLE IF NOT EXISTS books(
        id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
        title VARCHAR(255) NOT NULL,
        pic TEXT,
        local_pic TEXT,
        author VARCHAR(255),
        publisher VARCHAR(255),
        producer VARCHAR(255),
        subtitle VARCHAR(255),
        originalTitle VARCHAR(255),
        translator VARCHAR(255),
        pubdate VARCHAR(255),
        pages VARCHAR(255),
        price VARCHAR(255),
        binding VARCHAR(255),
        series VARCHAR(255),
        isbn VARCHAR(255) ,
        intro TEXT,
        doubanId VARCHAR(255),
        created_time DATETIME ,
        updated_time DATETIME  
    );
`;

// SQL语句：创建User数据表
const sqlCreateUser = `
    CREATE TABLE IF NOT EXISTS users(
        id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
        username VARCHAR(255) NOT NULL UNIQUE,
        password VARCHAR(255) NOT NULL,
        nickname VARCHAR(255),
        truename VARCHAR(255),
        avatar VARCHAR(255),
        role INTEGER NOT NULL,
        last_login_time DATETIME,
        last_login_ip VARCHAR(255) NOT NULL,
        login_count INTEGER DEFAULT 0,
        created_time DATETIME,
        created_ip VARCHAR(255) NOT NULL,
        updated_time DATETIME
    );
`;

    //SQL语句：创建User数据表中的第一个用户
const sqlCreateAdminUser = `
    INSERT INTO users(
        username, password, nickname, truename, avatar,
        role, last_login_time, last_login_ip, login_count, created_time,
        created_ip, updated_time
        ) VALUES (
        'admin', '${util.md5pwd("123456")}', '系统管理员', '超级管理员', './images/default.png', 
        1, 0, 'never login', 0, ${Date.now()}, 'system init', ${Date.now()}
    );
`;

//SQL语句：创建书架数据表
const sqlCreateBookshelf = `
    CREATE TABLE IF NOT EXISTS bookshelves(
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    user_id INTEGER NOT NULL,
    book_id INTEGER NOT NULL,
    read_status INTEGER DEFAULT 0,
    ranking INTEGER DEFAULT 0,
    created_time DATETIME NOT NULL,
    updated_time DATETIME NOT NULL
);`;

function SqliteDB(){
    this.dbFile = config.dbFile;
    // this.initDB();
    //如果数据库mylibrary.db文件不存在则创建数据库文件
    if(!fs.existsSync(this.dbFile)){
        util.log("创建SQLite数据仓库文件[mylibrary.db]");
        this.initDB();
    }
}

/**
 * 执行初始化创建数据库表的SQL语句
 */
SqliteDB.prototype.initDB = function(){
    let db = new sqlite3.Database(this.dbFile,(err) => {
        if(err){
            util.err(err);
        }
    });
    db.serialize(() => {
        db.run(sqlCreateBook);
        util.log("数据表Book创建成功")
        db.run(sqlCreateUser);
        util.log("数据表User新增数据成功")
        db.run(sqlCreateAdminUser);
        util.log("数据表User创建成功")
        db.run(sqlCreateBookshelf)
        util.log("数据表bookself创建成功")
    });



    //SQLite数据库是基于文件，大量的资源消耗在文件的打开与关闭上会降低效率
    // db.close((err) => {
    //     if(err){
    //         util.err(err);
    //     }
    // })
}


module.exports = SqliteDB